var row = 11; //行数
var col = 11; //列数
var maxMine = 16; //最大地雷数量
var count = document.getElementById('count'); //标记雷数
var isFirstOpen = true; //第一次打开方格
var map = createMap(); //初始化地图
var time = document.getElementById('time'); //计时器
var timer = setInterval(function() {
        var seconds = (parseFloat(time.innerHTML) + 1); //保留一位小数
        time.innerHTML = seconds;
    },1000) //定时器 1000ms执行一次

//初始化矩阵（地图） (row-行数 col-列数)
function initMap() {
//生成矩阵html <tr>--行标签 <td>--列标签
    var box = '';
    for (var i = 0; i < row; i++) {
        box += '<tr>'
        for (var j = 0; j < col; j++) {
            box += '<td><span class="box" onmousedown="clickBox(' + i + ',' + j + ',event)"></span></td>';
        }
        box += '<tr>'
    }
    //写入html
    document.getElementById('map').innerHTML = box;
}

function createMap(){//把设置好的地图返回矩阵二维数组 
    initMap();
    var blocks = document.getElementsByClassName('box');
    var map = new Array();//生成数组
    for (var i = 0; i < blocks.length; i++) {
        if (i % col === 0) {//=0说明已经到了一行的最后一个元素
            map.push(new Array());//再添加新的一行数组
        }   
        blocks[i].count = 0; // 初始化计雷数
        map[parseInt(i / col)].push(blocks[i]);//每个元素加入矩阵中
    }
      return map;
    }

//方格点击事件 r：第一个点击的行 c:第一个点击的列 e:鼠标事件
function clickBox(r, c, e) {

    //跳过已打开的方格
    if (map[r][c].isOpen) {
      return;
    }

    //鼠标左键打开方格
    if (e.button === 0) {

      //第一次打开
      if (isFirstOpen) {

        isFirstOpen = false;
        var count = 0; //当前地雷数

        //生成地雷
        while (count < maxMine) {

          //生成随机坐标
            var x = Math.ceil((row * Math.random()))-1;
            var y = Math.ceil((col * Math.random()))-1;

          //坐标不等于第一次点击方格的坐标 && 非雷方格
          if (!(x === r && y === c) && !map[x][y].isMine) {
            map[x][y].isMine = true; //自定义属性isMine代表方格为地雷
            count++; //当前地雷数+1

            //更新九宫格内非雷方格的计雷数
            for (var i = x - 1; i < x + 2; i++) {
              for (var j = y - 1; j < y + 2; j++) {
                //判断坐标防越界
                if (i > -1 && j > -1 && i < row && j < col) {
                  //计雷数+1
                  map[i][j].count++;
                }
              }
            }
          }
        }
      }
      open_box(r, c);  //执行打开方格函数
    }

    //鼠标右键标记方格
    else if (e.button === 2) {
      var count= document.getElementById('count');
      var block = map[r][c];
      if (block.innerHTML !== '★') {
        block.innerHTML = '★';
        count.innerHTML = parseInt(count.innerHTML)-1;
      } else {
        block.innerHTML = '';
        count.innerHTML = parseInt(count.innerHTML)+1;
      }
    }

    isWin();    
}

function isWin(){//遍历矩阵
    var count=document.getElementById('count');
    //判断游戏是否结束(所有的非雷方格已打开)
    for (var i = 0; i < row; i++) {
        for (var j = 0; j < col; j++) {
          if (!map[i][j].isMine && !map[i][j].isOpen) {
            return;
          }
        }
      }
      clearInterval(timer); //游戏结束停止计时，清除定时器
      alert("游戏胜利");
}


 //设定打开方格的状态与样式
function openCss(block) {
    block.isOpen = true; //isOpen为自定义属性，设置为true代表已打开
    block.style.background = '#ccc'; //将背景设置为灰色
    block.style.cursor = 'default'; //将鼠标停留样式设置为默认
}

//打开方格函数
function open_box(r, c) {

    var block = map[r][c];
    openCss(block);

    if (block.isMine) { //踩雷 
        block.innerHTML = '雷'; //显示为 '雷'
        //遍历矩阵打开所有的地雷方格
        for (var i = 0; i < row; i++) {
            for (var j = 0; j < col; j++) {
            //找到地雷
                block = map[i][j];
                if (!block.isOpen && block.isMine) {
                    openCss(block); //设置打开状态和样式
                    block.innerHTML = '雷'; //显示为 '雷'
                }
            }
        }
        clearInterval(timer); //游戏结束停止计时，清除定时器
        //提示游戏结束
        alert("游戏结束");
        } else if (block.count === 0) {
        //打开计雷数为0的方格
        //遍历九宫格内的方格
        for (var i = r - 1; i < r + 2; i++) {
            for (var j = c - 1; j < c + 2; j++) {
            //判断是否越界&&跳过已打开的方格&&非雷
                if (i > -1 && j > -1 && i < row && j < col && !map[i][j].isOpen && !map[i][j].isMine) {
                    //递归打开方格函数
                    open_box(i, j);
                }
            }
        }
        } else {
        //打开计雷数不为0的方格
        block.innerHTML = block.count; //显示计雷数
    }
  }
function Clear(){
    location.reload();
}